package com.smartboot.plus.ignite.listener;

import com.smartboot.plus.holder.BrokerContextHolder;
import org.apache.ignite.internal.processors.security.PublicAccessJob;
import org.apache.ignite.lang.IgniteRunnable;
import org.apache.ignite.plugin.security.SecurityPermission;
import org.apache.ignite.plugin.security.SecurityPermissionSet;
import org.apache.ignite.plugin.security.SecurityPermissionSetBuilder;
import tech.smartboot.mqtt.plugin.spec.MqttSession;

 // 广播
  //igniteInstance.compute().broadcast(new DisconnectTask(clientId, brokerContext));
public class DisconnectBroadcast implements IgniteRunnable, PublicAccessJob {


    private String clientId;

    public DisconnectBroadcast(String clientId ) {
        this.clientId = clientId;
    }

    @Override
    public void run() {
        try {
            MqttSession session =  BrokerContextHolder.get().getSession(clientId);
            if (session != null) {
                session.disconnect();
            }
        } catch (Exception e) {
            System.err.println("Error disconnecting session for " + clientId + " on node: " + e.getMessage());
        }
    }
    /**
     * 🔐 Cache（缓存）相关权限：
     * CACHE_READ：允许读取缓存数据的权限。
     * CACHE_PUT：允许写入/更新缓存数据的权限。
     * CACHE_REMOVE：允许删除缓存数据的权限。
     * CACHE_CREATE：允许创建新的缓存的权限。
     * CACHE_DESTROY：允许销毁已有缓存的权限。
     *
     * 🧠 Task（任务）相关权限：
     * TASK_EXECUTE：允许执行任务的权限。
     * TASK_CANCEL：允许取消任务的权限。
     *
     * 📋 Events（事件）相关权限：
     * EVENTS_ENABLE：允许启用事件的权限。
     * EVENTS_DISABLE：允许禁用事件的权限。
     *
     * 👨‍💼 Admin（管理员操作）权限：
     * ADMIN_VIEW：允许查看 Visor 工具中的任务（通用查看权限）。
     * ADMIN_QUERY：允许在 Visor 中执行缓存查询操作。
     * ADMIN_CACHE：允许 Visor 中对缓存进行加载操作。
     * ADMIN_OPS：执行管理员级操作的权限（通常用于维护任务）。
     * ADMIN_KILL：允许杀死系统进程。
     * ADMIN_USER_ACCESS：对用户的安全访问权限进行管理。
     * ADMIN_METADATA_OPS：允许管理元数据的操作（如更新/删除）。
     * ADMIN_READ_DISTRIBUTED_PROPERTY：读取集群分布式属性的权限。
     * ADMIN_WRITE_DISTRIBUTED_PROPERTY：写入集群分布式属性的权限。
     * ADMIN_SNAPSHOT：对集群快照进行操作的权限（创建、取消、校验）。
     * ADMIN_CLUSTER_STATE：更改集群状态（例如从激活到非激活）。
     * ADMIN_CLUSTER_NODE_START：启动新的集群节点。
     * ADMIN_CLUSTER_NODE_STOP：停止或重启集群节点。
     *
     * 🧩 Service（服务）相关权限：
     * SERVICE_DEPLOY：允许部署服务。
     * SERVICE_CANCEL：允许取消服务。
     * SERVICE_INVOKE：允许调用服务。
     *
     * 📊 统计相关权限：
     * REFRESH_STATISTICS：刷新统计信息的权限。
     * CHANGE_STATISTICS：分析或删除统计信息的权限。
     *
     * 🤝 加入集群相关权限：
     * JOIN_AS_SERVER：允许以服务器身份加入集群的权限。
     * @return
     */
    @Override
    public SecurityPermissionSet requiredPermissions() {
        // 创建一个权限构建器
        SecurityPermissionSetBuilder builder = new SecurityPermissionSetBuilder();

        // 添加任务执行权限
        builder.appendTaskPermissions(this.getClass().toString(),
                SecurityPermission.TASK_EXECUTE,
                SecurityPermission.TASK_CANCEL);


        // 构建并返回权限集
        return builder.build();

    }
}
